import type { IBaseEntity } from '../common/base';
import type { CourseStatusEnum } from './enums';

/**
 * 课程实体接口
 * @description 课程的完整信息结构
 */
export interface ICourse extends IBaseEntity {
  /** 课程名称 */
  name: string;
  /** 课程代码 */
  courseCode: string;
  /** 授课教师 */
  teacher: string;
  /** 课程描述 */
  description?: string;
  /** 课程颜色（用于显示区分） */
  color: string;
  /** 课程分类ID列表 */
  categoryIds: string[];
  /** 课程状态 */
  status: CourseStatusEnum;
  /** 课程时长（分钟） */
  duration?: number;
  /** 课程费用 */
  fee?: number;
  /** 课程容量（最大学生数） */
  capacity?: number;
  /** 课程难度等级 */
  level?: 'beginner' | 'intermediate' | 'advanced';
  /** 课程标签 */
  tags?: string[];
  /** 课程封面图片URL */
  coverImage?: string;
  /** 课程资料链接 */
  materials?: Array<{
    name: string;
    url: string;
    type: 'pdf' | 'video' | 'audio' | 'document' | 'link';
  }>;
  /** 课程大纲 */
  syllabus?: string;
  /** 先修课程ID列表 */
  prerequisites?: string[];
  /** 课程目标 */
  objectives?: string[];
  /** 评估方式 */
  assessmentMethods?: string[];
  /** 备注信息 */
  remark?: string;
}

/**
 * 课程创建请求
 * @description 创建课程时需要的数据
 */
export type ICourseCreateRequest = Omit<ICourse, 'id' | 'createdAt' | 'updatedAt'>;

/**
 * 课程更新请求
 * @description 更新课程信息时的数据
 */
export type ICourseUpdateRequest = Partial<ICourseCreateRequest> & {
  /** 课程ID */
  id: string;
};

/**
 * 课程查询参数
 * @description 查询课程时的筛选条件
 */
export interface ICourseQueryParams {
  /** 课程名称（模糊搜索） */
  name?: string;
  /** 课程代码 */
  courseCode?: string;
  /** 授课教师（模糊搜索） */
  teacher?: string;
  /** 课程分类ID */
  categoryId?: string;
  /** 课程分类ID列表 */
  categoryIds?: string[];
  /** 课程状态 */
  status?: CourseStatusEnum;
  /** 课程难度等级 */
  level?: 'beginner' | 'intermediate' | 'advanced';
  /** 课程标签 */
  tags?: string[];
  /** 费用范围 - 最小费用 */
  minFee?: number;
  /** 费用范围 - 最大费用 */
  maxFee?: number;
  /** 时长范围 - 最小时长 */
  minDuration?: number;
  /** 时长范围 - 最大时长 */
  maxDuration?: number;
  /** 是否有先修课程 */
  hasPrerequisites?: boolean;
}

/**
 * 课程统计信息
 * @description 课程相关的统计数据
 */
export interface ICourseStatistics {
  /** 课程总数 */
  totalCount: number;
  /** 正常课程数 */
  activeCount: number;
  /** 暂停课程数 */
  suspendedCount: number;
  /** 已删除课程数 */
  deletedCount: number;
  /** 按分类分组统计 */
  categoryDistribution: Array<{
    categoryId: string;
    categoryName: string;
    count: number;
  }>;
  /** 按教师分组统计 */
  teacherDistribution: Array<{
    teacher: string;
    count: number;
  }>;
  /** 按难度等级分组统计 */
  levelDistribution: Array<{
    level: 'beginner' | 'intermediate' | 'advanced';
    count: number;
  }>;
  /** 平均课程费用 */
  averageFee: number;
  /** 平均课程时长 */
  averageDuration: number;
}

/**
 * 课程简要信息
 * @description 用于列表显示的课程简要信息
 */
export interface ICourseSummary {
  /** 课程ID */
  id: string;
  /** 课程名称 */
  name: string;
  /** 课程代码 */
  courseCode: string;
  /** 授课教师 */
  teacher: string;
  /** 课程颜色 */
  color: string;
  /** 课程状态 */
  status: CourseStatusEnum;
  /** 课程时长 */
  duration?: number;
  /** 课程费用 */
  fee?: number;
}

/**
 * 课程详情扩展信息
 * @description 包含关联数据的课程详情
 */
export interface ICourseDetail extends ICourse {
  /** 关联的课程分类信息 */
  categories: Array<{
    id: string;
    name: string;
    color: string;
  }>;
  /** 先修课程信息 */
  prerequisiteCourses?: ICourseSummary[];
  /** 学生数量 */
  studentCount: number;
  /** 课程实例数量 */
  scheduleCount: number;
  /** 最近更新时间 */
  lastScheduleTime?: string;
}